//============================================================================
// Name        : lab01b.cpp
// Author      : Adam Siemiński
// Version     :
// Copyright   : (c) by Kisiel 2012
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <stdio.h>
#include <vector>
#include <string.h>
#include "gmp.h"
using namespace std;

int main(int argc, char *argv[])
{
    if (argc != 2)
        return 1;
    
    int d, n, i;
    char* temp = new char[2^18];
	mpz_t data[2^24];
	mpz_t suma;
	mpz_t suma2; // suma kwadratow
    mpz_t tmp;
    mpq_t mpq1n; // 1/n w mpq
	mpq_t srednia;
    mpq_t srednia2; // srednia kwadratow
    mpf_t wariancja;
    
	mpz_init(suma);
	mpz_init(suma2);
	mpz_init(tmp);
    mpq_init(mpq1n);
	mpq_init(srednia);
    mpq_init(srednia2);
    mpf_init2(wariancja, 65536);
    
/**
 * Wczytywanie danych.
 */
    
	if (sscanf(argv[1], "%d", &d) != 1)
        return 1;
    
	n = 0;
	while(!feof(stdin))
    {
		mpz_init(data[n]);
		unsigned long res = mpz_inp_str(data[n++], NULL, 10);
		if(res == 0)
			n--;
	}
    
/**
 * Obliczenia.
 */
    
	for(i = 0; i<n ;i++)
    {
        mpz_mul(tmp, data[i], data[i]);
		mpz_add(suma2, suma2, tmp);
        mpz_add(suma, suma, data[i]);
	}
	
    mpq_set_si(mpq1n, 1, (long)n);
    
    mpq_set_z(srednia2, suma2);
    mpq_mul(srednia2, srednia2, mpq1n);
    
    mpq_set_z(srednia, suma);
    mpq_mul(srednia, srednia, mpq1n);
    
    // od teraz srednia to bedzie kwadrat sredniej zeby dodatkowych zmiennych nie robic
    mpq_mul(srednia, srednia, srednia);
    
    // a w srednia2 bedzie roznica srednia2 i srednia (wariancja, ale w mpq)
    mpq_sub(srednia2, srednia2, srednia);
    
    mpf_set_q(wariancja, srednia2);
    
/**
 * Wypisanie wyników.
 */
    
	gmp_sprintf(temp, "%.*Ff", d+1, wariancja);
    temp[strlen(temp)-1] = 0;
    printf("%s\n", temp);
    
/**
 * Sprzątanie po sobie.
 */
    
    delete temp;
    
	for(i = 0 ; i < n ; i++)
		mpz_clear(data[i]);
    
    mpz_clear(suma);
    mpz_clear(suma2);
    mpz_clear(tmp);
    mpq_clear(mpq1n);
	mpq_clear(srednia);
    mpq_clear(srednia2);
    mpf_clear(wariancja);
    
    return 0;
}
